
        <html>
			<head>
			     <title>WIFI WPA1/2 Crack for Windows - boywhp</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/wireless/13968">http://drops.wooyun.org/wireless/13968</a></h1>
				
      <p>
        <h1>0x00 前言</h1>

<hr />

<p>目前WIFI WPA破解主要 以“aircrack-ng”为代表，运行于Linux系统( 如Kali Linux )，Windows系统比较少见，主要是Windows系统下WIFI网卡收发原始包比较困难，且缺少有主流WIFI网卡开源代码可参考。因此WPA破解通常流程是先在Linux机器（或Linux虚拟机）在抓取WPA 四次握手包，然后再通过以“Elcomsoft Wireless Security Auditor”为代表的密码字典爆破软件在Windows下进行破解。</p>

<!--more-->

<h1>0x01 WIFI协议基础</h1>

<hr />

<ul>
<li><strong>AP (Access Point)：</strong>WIFI热点，通常是一个WIFI路由设备</li>
<li><strong>SSID（Service Set Identity）：</strong>AP的名称，0-32个字符组成</li>
<li><strong>BSSID（Basic Service Set Identity）：</strong>基本服务集标识，通常是AP的MAC</li>
<li><strong>STA（STATION）：</strong>连接到AP的客户端</li>
<li><strong>DS：</strong>分布式系统，多个AP可以组成分布式无线系统。</li>
<li><strong>DA：</strong>目标MAC地址</li>
<li><strong>SA：</strong>源MAC地址</li>
<li><strong>WIFI数据帧：</strong>WIFI数据帧主要分为物理层、MAC层、数据层。物理层通常</li>
</ul>

<p>由具体硬件处理，实际只需要考虑MAC（Media Access Control）和LLC（逻辑链路控制），具体数据帧如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205275062433120.jpg" alt="p1" /></p>

<p>MPDU是MAC层的协议头，其中常用的是FrameControl字段和Addr1、Addr2、Addr3等。</p>

<ul>
<li><strong>ToDs/FromDS：</strong>指明了MPDU地址格式，具体组合如下。</li>
</ul>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205275230217212.jpg" alt="p2" /></p>

<p>WIFI协议的MPDU头长度不是固定的，是可变的。</p>

<p><strong>Type/SubType：</strong>共同指明了接下来的数据帧的格式，其中Type 2bits，指明了帧类型，SubType 4bits，进一步指定了数据的具体格式。</p>

<table>
  <tr>
    <td>
      Type
    </td>
    
    <td>
      00/管理帧
    </td>
    
    <td>
      01/控制帧
    </td>
    
    <td>
      10/数据帧
    </td>
    
    <td>
      11/保留
    </td>
  </tr>
</table>

<p>WPA破解时用到的主要有WIFI管理帧和数据帧，其中管理帧对应的SubType情况见下表：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205275392976312.jpg" alt="p3" /></p>

<p>STA在登录AP前，首先需要通过一系列的管理帧，建立同AP的数据联系，然后才能实施登录并启用加密数传，同时WIFI管理帧是不加密的，具体流程如下：</p>

<table>
<thead>
<tr>
  <th>序号</th>
  <th>SubType</th>
  <th>说明</th>
</tr>
</thead>
<tbody>
<tr>
  <td>1</td>
  <td>8</td>
  <td>Beacon，STA接受AP信标帧，感知到AP，获取SSID及AP参数</td>
</tr>
<tr>
  <td>2</td>
  <td>4</td>
  <td>STA主动发送Probe探测请求</td>
</tr>
<tr>
  <td>3</td>
  <td>5</td>
  <td>AP应答STA Prob Response</td>
</tr>
<tr>
  <td>4</td>
  <td>11</td>
  <td>STA发送Authentication请求认证</td>
</tr>
<tr>
  <td>5</td>
  <td>11</td>
  <td>AP应答Authentication请求，指示STA认证成功或失败</td>
</tr>
<tr>
  <td>6</td>
  <td></td>
  <td>STA发送Association请求</td>
</tr>
<tr>
  <td>7</td>
  <td>1</td>
  <td>AP应答Association Response</td>
</tr>
</tbody>
</table>

<p>一旦STA完成上述流程后，STA和AP之间即可进行数据帧传输，以便接下来的WPA用户认证。</p>

<h1>0x02 WPA密码破解原理</h1>

<hr />

<p>WPA-PSK(WPA个人版)在STA和AP建立数传后，使用了EAPOL（Extensible Authentication Protocol OVER LAN）协议处理用户的登录认证，具体由四次握手组成，如下图。</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205275519781411.jpg" alt="p4" /></p>

<p>AP首先向STA发送一个32字节的ANonce随机数（实际上一般是累加计数器），STA收到该随机数后，自己也产生一个32字节的SNonce随机数，同时根据这两个随机数以及登录密码计算出一个PTK（Pairwise Transient Key），具体计算过程如下：</p>

<p><strong>1、PMK = PBKDF2(HMAC−SHA1, pwd, ssid, 4096, 256)</strong></p>

<p>首先使用PBKDF2（Password-Based Key Derivation Function 2）算法生成一个32字节的PMK key，该算法需要执行4096*2轮，WPA破解时运算量主要集中在该key的计算，同时由于使用了SSID（0-32字符）进行salt，导致很难使用彩虹表进行预计算。</p>

<p><strong>2、</strong>PTK = PRF-512(PMK, “Pairwise key expansion”, Min(AP&#95;Mac, Sta&#95;Mac) ||Max(AP&#95;Mac, Sta&#95;Mac) || Min(ANonce, SNonce) || Max(ANonce, SNonce))</p>

<p>PTK使用PRF-512（pseudo random functions 512bits）算法产生，通过PMK、固定字符串、AP&#95;Mac、Sta&#95;Mac、ANonce、SNonce六个输入参数得到一个64字节PTK。</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205275684158511.jpg" alt="p5" /></p>

<p>PTK由5部分组成，如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/201603220527582867269.jpg" alt="p6" /></p>

<p>WPA1 TKIP的PTK长度512bits，WPA2 CCMP的PTK长度为384bits，其中KCK用来计算WPA EAPOL KEY消息的MIC；AP使用KEK加密WPA EAPOL KEY消息的额外Key Data数据；TEK用于单播数据加密。</p>

<p>WPA破解最关键的部分就是通过KCK计算MIC，其算法如下：</p>

<p><strong>WAP MIC</strong> = HMAC(<strong>EVP_sha1()</strong>, <code>KCK</code>, 16, eapol&#95;data，eapol&#95;size) <strong>WAP2 MIC</strong> = HMAC(<strong>EVP_md5()</strong>, <code>KCK</code>, 16, eapol&#95;data，eapol&#95;size)</p>

<p>总结一下WPA具体破解流程如下：</p>

<table>
<thead>
<tr>
  <th>序号</th>
  <th>说明</th>
</tr>
</thead>
<tbody>
<tr>
  <td>1</td>
  <td>抓取4-way握手包，实际上只需要前两次即可</td>
</tr>
<tr>
  <td>2</td>
  <td>通过密码字典计算PMK</td>
</tr>
<tr>
  <td>3</td>
  <td>通过PMK、ANONCE、SNONCE、MAC1、MAC2计算PTK</td>
</tr>
<tr>
  <td>4</td>
  <td>通过PTK得到KCK，计算第2次EAPOL报文对应的MIC</td>
</tr>
<tr>
  <td>5</td>
  <td>同第2次EAPOL报文中MIC比较，匹配则密码正确</td>
</tr>
</tbody>
</table>

<h1>0x03 Window WIFI数据包收发</h1>

<hr />

<p>目前Windows下比较成熟的WIFI数据包收发软件是CommView for WiFi，该软件是一款商业软件，兼容的网卡较多，功能也比较强大。该软件的BMD目录下有一个比较通用的WiFi Capture Driver，结合互联网搜集整理的资料发现，Windows NDIS6框架下能够实现WIFI数据包收发功能，决定使用NDIS6 Filter Driver进行WIFI数据包收发。</p>

<h3>调试开发环境</h3>

<p>使用VirtualBox + VirtualKD + Windbg + RTL8187 USB WIFI网卡，目标系统Window7 x86，注意VirtualBox需要安装VirtualBox扩展包，否则无法将主机USB网卡切换到虚拟机中调试。 Windows WDK 7600编译环境，WDK中的filter、usbnwifi示例源码极具参考价值，filter是NDIS 6 NDIS Filter示例代码，usbnwifi是usb wifi网卡驱动的一个参考代码，在没有实际USB网卡驱动源码的情况下，可以大致了解底层网卡的一些实现细节。</p>

<h3>WIFI数据嗅探</h3>

<p>NDIS6框架下底层网卡最终通过调用NdisMIndicateReceiveNetBufferLists指示上层NDIS驱动接受数据包，查看该函数调用情况如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/201603220527597435078.jpg" alt="p7" /></p>

<p>主要有三个地方调用了该函数，分别是<strong>MpHandleRawReceiveInterrupt</strong>、MpHandleDefaultReceiveInterrupt、MpHandleSafeModeReceiveInterrupt，重点看前两个函数，在<strong>MpAdjustReceiveHandler</strong>函数中有如下初始化代码：</p>

<p><img src="http://static.wooyun.org//drops/20160322/201603220528011699187.jpg" alt="p8" /></p>

<p>很明显，这两个函数对应了不同网卡模式下WIFI网卡的数据接受函数，在WIFI破解时需要将网卡设置成monitoring mode。</p>

<p><strong>MpAdjustReceiveHandler</strong>在<strong>MpSetCurrentOperationMode</strong>时被调用，在MpSetInformation函数中：</p>

<p><img src="http://static.wooyun.org//drops/20160322/201603220528027688797.jpg" alt="p9" /></p>

<p><code>OID_DOT11_CURRENT_OPERATION_MODE</code>是NDIS 标准WIFI OID请求，用来设置WIFI网卡的工作模式，定义的模式有：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205280382353106.jpg" alt="p10" /></p>

<p>总结一下WIFI破解时，数据接受的处理流程就是：首先设置网卡为监控模式（混杂模式），然后在网卡驱动之上的Filter驱动里，处理原始数据包接受，通常可以先接受到临时队列里，再在应用层使用IoControl读取该队列，实现WIFI数据包嗅探。</p>

<h3>WIFI数据发送</h3>

<p>NDIS小端口驱动通过NdisMRegisterMiniportDriver注册驱动程序，注册的同时需指明Ndis数据发送函数。</p>

<p><img src="http://static.wooyun.org//drops/20160322/20160322052805146511111.jpg" alt="p11" /></p>

<p>该函数中会首先检查网卡的状态，如果状态不合适就不会继续发送数据包，具体检查代码如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205280673314127.jpg" alt="p12" /></p>

<p><code>MP_ADAPTER_CANNOT_SEND_PACKETS</code>宏定义如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205280843114136.jpg" alt="p13" /></p>

<p><code>MP_ADAPTER_CANNOT_SEND_MASK</code>掩码定义如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205280937766143.jpg" alt="p14" /></p>

<p>注意其中高亮的部分，很明显，微软的NDIS USB WIFI驱动示例代码默认是不允许在监控模式下发包的，鉴于WDK示例代码的权威性，有理由相信，采用该WDK模版代码修改的USB WIF驱动都不能在监控模式下发包，这也是Windows WIFI破解需要面临的一个大问题。</p>

<p>既然官方驱动不能在监控模式下发包，那么就只能自己动手了，直接给官方驱动打个简单的Patch，找到关键的检测位置，然后手动patch一下好了。当然实际厂商的驱动可能会有所不同，需要多调试和测试好。</p>

<p>总结下WIFI破解时，数据发送的处理流程如下：首先找一款支持监控模式下能发包的网卡和驱动（CommView for WIFI自带的驱动应该都可以），或者手动Patch好官方驱动，然后在应用层IoControl写Raw WIFI数据到Filter驱动，Filter构造NET&#95;BUFFER&#95;LIST，最后使用NdisFSendNetBufferLists将数据发送给底层WIFI网卡驱动。</p>

<h1>0x04 WPA破解流程</h1>

<hr />

<p>WPA破解主要分为如下几个具体步骤，一是开启网卡嗅探模式，对周围WIFI数据包进行捕获，二是分析周围AP和STA的分布情况，为Deauth攻击做好准备，三是实施Deauth攻击，四是捕获EAPOL握手数据包。</p>

<h3>开启网卡嗅探</h3>

<p>NDIS6通过<code>OID_DOT11_CURRENT_OPERATION_MODE</code>设置网卡的工作模式，因此直接通过驱动发送OID设置网卡模式即可，该OID对应的参数数据结构为<code>DOT11_CURRENT_OPERATION_MODE</code>，具体如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205281095092153.jpg" alt="p15" /></p>

<p>通过内核直接发送OID会出现一些问题，主要是Windows WIFI应用层不能即时获取通知，导致Windows应用层在嗅探模式设置功能后，尝试连接网络，出现模式干扰，但CommView就不会出现该情况。</p>

<p>分析CommView驱动后发现，CommView并没有在驱动里面进行具体模式的设置，而是在应用层ca2k.dll调用了Wlan API设置监控模式。</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205281271703162.jpg" alt="p16" /></p>

<p>WlanSetInterface的OpCode码为12，对应：</p>

<p><code>wlan_intf_opcode_current_operation_mode</code>（12），具体代码如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205281365876171.jpg" alt="p17" /></p>

<h3>AP/STA探测</h3>

<p>WPA破解时需要用到AP的SSID以及MAC地址，AP探测主要通过信标帧以及探测应答帧来实现，具体如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205281562048181.jpg" alt="p18" /></p>

<p>WIFI信标帧格式如下</p>

<table>
  <tr>
    <td>
      DOT11_MGMT_HEADER
    </td>
    
    <td>
      DOT11_BEACON_FRAME
    </td>
    
    <td>
      DOT11_INFO_ELEMENT
    </td>
    
    <td>
      INFO...
    </td>
  </tr>
</table>

<p>其中<code>DOT11_MGMT_HEADER</code>、<code>DOT11_BEACON_FRAME</code>是固定的，AP的MAC地址可以从<code>DOT11_MGMT_HEADER</code>中获取，固定头后跟了一个<code>DOT11_INFO_ELEMENT</code>的列表，定义如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205281624925191.jpg" alt="p19" /></p>

<p>需要依次遍历其中<strong>ElementID</strong>，获取AP的一系列属性，一些常用的ID定义如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/201603220528182486320.jpg" alt="p20" /></p>

<p>分别对应AP的SSID、当前频道、WPA2参数等。</p>

<p>STA的探测主要通过数据帧来实现，WPA破解目前只用到了STA的MAC地址，根据每个数据帧的FromDS、ToDS情况，解析数据包MAC地址，即可实现抓取在线通信的STA地址，具体如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205281953567213.jpg" alt="p21" /></p>

<h3>Deauth攻击</h3>

<p>根据WIFI协议规定，客户端在接受到Deauth管理帧后，应该主动断开同AP的连接，一旦断开后，STA会自动尝试重连，这时就方便抓取EAPOL四次握手包了，因此成功实施Deauth攻击可以极大提高WPA破解的效率。</p>

<p>Aircrack里面的Deauth攻击模版如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205282151133221.jpg" alt="p22" /></p>

<p>其中<code>\xC0\x00</code>指明了该帧是Deauth管理帧，最后的<code>\x02\00</code>指定了本次Deauth的Code码，Aircrack里是<code>\x06\x00</code>，区别起见，修改了下。</p>

<p>发送Deauth攻击时，将DA替换成目标STA的MAC地址（或广播），SA、BSSID填上AP的MAC即可。</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205282264733231.jpg" alt="p23" /></p>

<h3>EAPOL捕获</h3>

<p>EAPOL帧的识别比较简单，因为802.1x数据帧前，LLC（逻辑链路控制）头会有一个标识0x888e，直接内存搜索即可定位EAPOL帧，稍微麻烦一点的是要确定当前EAPOL包在四次握手中次序，因为在实际网络嗅探时，有很大可能出现漏抓的情况。</p>

<p>EAPOL数据包格式如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205282352955241.jpg" alt="p24" /></p>

<p>其中ProType=3表示是Key，Key描述数据结构如下：</p>

<p><img src="http://static.wooyun.org//drops/20160322/2016032205282534801251.jpg" alt="p25" /></p>

<p>其中<code>KEY_INFO</code>数据定义了一系列的标志位，EAPOL四次握手时，各个阶段的标志位会不尽相同，通过分析这些标志位情况，可以获取其在四次握手时的次序。一旦监控到一次的完整四次握手，即可认为当前AP握手包抓取成功。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          